# 修改元组元素
tuple1 = (12, 34, 56)
tuple2 = ('abc', 'mn')
# 修改元组元素操作是非法的
# tuple[0]=100
# tuple[0]=200
# 连接元组创建一个新的元组，两个数据必须都是元组
tuple3 = tuple1 + tuple2
print(tuple3)
del (tuple1)

# 使用input方法输入姓名，电话，邮箱地址，联系地址定义元组tuple存储信息，输入tuple1查看联系人信息
n = input('请输入联系人姓名:')
t = input('请输入13位手机号:')
e = input('请输入邮箱地址:')
a = input('请输入联系地址:')
tuple1 = ("姓名：", n, "电话：", t, "邮箱：", e, "地址：", a)
print(tuple1)

'''列表list'''
# 列表使用
# 1.使用[]直接创建列表：
# list[1,"hello",2,"c语言"]
print(list)
print(type(list))
# 创建一个空列表
list1 = []
print(list1)

# #2.使用list（）函数将其他数据类型（字符串，元组，range函数）转换为列表：
# #将字符串转换成列表
list1 = list("hello")
print(list1)
# 创建空列表
print(list())
# 1转换字符串
l3 = list("hello")
print(l3)

# 2.转换元组
t1 = tuple("hello")
l4 = list(t1)
print(l4)

# 3.转化range函数
r1 = range(5)  # 0,1,2,3,4
print(r1)
l5 = list(r1)
print(l5)

# 访问列表中的元素
l1 = [1, 2, 3, '8', 'p', 'u']
# 使用正数索引进行访问，访问p
print(l1[4])
# 使用负向索引进行访问p
print(l1[-2])

# #使用切片访问元素的格式：代码如下:
# list1=['p','y','t','h','o','n']
# #使用正数切片，截取索引为2,3,4的元素，默认步长为1
# print(list1[2:5])
# print(list1[:3])#截取索引默认为最后一个元素
# print(list[3:])
# 用正数切片，截取索引为1-5的元素，默认步长为2
# print(list1[1:6:2])
# print(list1[-3:-1])#使用负数切片
# # 步长如果是负数，即从右向左提取元素
# print（list1[::-1])
# 使用切片方式访问列表中的元素
l2 = ['p', 'u', 'w', 'r', 1, 5, 7]

# 正向取值
# 使用正切片取出索引2,3,4的元素
print(l2[2:5])
# 正切片取前三个元素
print(l2[:3])
# 正切片取后三个元素
print(l2[4:])
# 使用正切片，取索引1-5的元素，步长为2
print(l2[1:6:2])

# 负向取值
# 使用负切片形式取出u，w，r
print(l2[-6:-3])
# 步长为负数的话，取值从左到右，常用在排序上边，倒序形式
print(l2[::-1])
l3 = [10, 8, 6, 5, 2, 1]
print(l3[::-1])

# 遍历列表
# 使用for循环遍历列表
p3 = ['python', 'java', 'c', 'c++', 'r', 'go', 'javascript']
for i in p3:
    print(i)

# 修改列表元素
# 修改单个元素   =是赋值符号
p4 = [10, 56, 34, 2, 56, 44, 7]
# 将索引为2的元素值修改为100
p4[2] = 100
print(p4)

# 修改多个元素  切片
p5 = [10, 56, 34, 2, 56, 44, 7]
# 修改1~4个元素的值（不包括第4个元素）
p5[1: 4:1] = [45, -56, 98]
print(p5)

# 列表中添加元素
# 1、append()用于在列表的尾部追加元素
p6 = ['a', 'b', 'c']
p6.append('f')
print(p6)
# 列表添加列表
p6.append('e', 'f')
print(p6)

# # 2.extend()在列表的末尾一次添加多个元素
p7 = ['a', 'b', 'c']
p7.append('d')
print(p7)
# 列表添加列表
p7.append('e', 'f')
print(p7)

p8 = ['Python', 'C', 'jave']

p8.insert(2, 'go')
p8.insert(1, 'c++')
print(p8)

#  删除元素
l15 = ['a', 'b', 'c', 'd']
l15.remove('a')
print(l15)
# #如果元素不在列表中，删除元素时会报错
# l15.remove('f')

# pop()方法用来删除列表中指定索引处的元素
l16 = [10, 56, 34, 2, 56, 44, 7]
# 删除索引为3的元素
l16.pop(3)
print(l16)
# 删除最后一个元素
l16.pop()
print(l16)

# del 可以用来删除列表中单个元素或者一段连续的元素
l17 = ['a', 'b', 'c', 'd', 'e']
# 删除索引为1的元素
del l17[1]
print(l17)
l18 = [10, 56, 34, 2, 58, 44, 7]
# 删除索引为1-3的元素
del l18[1:4]
print(l18)

# 将列表中所有元素全部删除，可使用列表的clear（）方法
l19['a','b','c','d']
#清空列表
l19.clear()
print(l19)


# 任务
# 创建两个空列表name-list和phone-list，用于存储联系人姓名和电话；
# 向列表中添加联系人信息；
# 输入联系人编号修改信息；
# 输入联系人编号删除信息；
# # 使用clear（）清空通讯录。
name_liat=[]
phone_list=[]
while 1:
    print("菜单：1.添加联系人 2.修改联系人 3.删除联系人")
    chioce=input("请输入选择：")
    #1.添加联系人，包括姓名，手机号
    if choice =="1":
        name_liat.append(input("请输入联系人姓名："))
        phone_list.append(input("请输入联系人手机号："))
        print(name_liat)
        print(phone_list)
 #2.修改
    elif chioce =="2":
        num = int(input("请输入联系人编号"))
        if len(name_list)> 0 and num <=len(name_list):
            name_list[num - 1] = input("修改联系人姓名")
            phone_list[num - 1] =input("修改联系电话")
        else:
            print("联系人编号输入有误")
        #3.删除
    elif chioce == "3":
        num = int(input("请输入联系人编号:"))
        if len(name_list) > 0 and num <= len(name_list):
            name_list.pop(num - 1)
            phone_list.pop(num - 1)
        else:
            print("联系人编号输入有误")
    else:
        print("显示联系人信息")
        print(name_list)
        print(phone_list)
# 查找元素index（）列表名.index[要查找的元素，索引起始位置，索引结束位置]
ls1 = [2, 3, 5, 7, 8, 'a', 0, 'b', 'a', 'b', 3]
print(ls1.index(3))
print(ls1.index('b', 6, 9))
print(ls1.index('a', 7))
# print(ls1.index(12))


# count()统计出现的次数 列表名。count
ls2 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b', 2, 5, 5, 7, 1]
print(ls2.count(5))
print(ls2.count(0))
print(ls2.count('b'))

# 元素排序sort（）函数用于对原列表进行排序，如果指定参数，则使用指定的比较函数
# 1.元素是字符串的排序
ls3 = ['1', '3', '44', '23', '99', '88', '56', '233']
# 默认升序
ls3.sort()
print(ls3)
# 降序 reverse=True
ls3.sort(reverse=True)
print(ls3)

# 2.元素数值排序
ls4 = [1, 3, 5, 7, 4, 6, 9, ]
# 默认升序
ls4.sort()
print(ls4)
# 降序 reverse=True
ls4.sort(reverse=True)
print(ls4)

"""字典"""
# 字典的创建
# 1.使用{}创建字典语法格式
# 使用字符串作为key
d1 = {'python': 90, "可视化": 89, "英语": 85}
print(type(d1))
# 使用元组和数字作为key
d2 = {(23, 89): "great", 30: [1, 3, 4]}
print(type(d2))
# 创建空元组
d3 = {}
print(d3)
# 2.用dict（）通过关键字的参数创建字典格式
d4 = dict(数学=98, 语文=87, 英语=89)
print(d4)
Gitee - 基于 Git 的代码托管和研发协作平台

# #字典元素的访问
# 1.字典名[key]
d5={'数学':95,'英语':92,'语文':84}
#存在键，返回的是指value
print(d5['英语'])
#键不存在，会引发一个keyerror错误
print(d5['数学'])

#2.get()方法来获取指定键对应的值，语法格式：字典名.get(key[,default])
d6={'数学':95,'英语':92,'语文':84}
#键存在
print(d6.get('语文'))
#键存在，不写default，会返回none
print(d6.get('python'))
print(d6.get('oython','该键不存在'))

# #字典添加键值对
d7={'数学':95,'英语':92,'语文':84,'python':99}
d7['可视化']=99
print(d7)

# #字典添加键值对
d8={'数学':95,'英语':92,'语文':84,'python':99}
d8['英语']=100
print(d8)

# #字典添加键值对
d9={'数学':95,'英语':92,'语文':84,'python':99}
#1.使用del关键字
del d9['语文']
print(d9)
#2.使用pop()方法
d9.pop('英语')
print(d9)